package com.itheima.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    /*
        方式一：使用session
            之前：登录成功将员工的id存入到了session中
            现在：在这个类中从session对象中获取登录员工id 动态为公共字段赋值
            原因：
                SpringBoot项目添加了web起步依赖，session对象就被创建处理交给SpringIOC容器管理了，而我们的MyMetaObjectHandler类上打的有@Component注解 说明也交给IOC容器管理
                因此：就可以直接在MyMetaObjectHandler类中声明HttpSession属性注入进来直接使用
     */

    /*@Autowired
    private HttpSession  session;*/


    //设置插入时要填充的字段数据
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("【公共字段自动填充-insert】");

        //Long id = (Long) session.getAttribute("employee");
        Long id = BaseContext.getCurrentId();

        //创建时间 修改时间
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());

        //创建人 修改人
        metaObject.setValue("createUser",id);
        metaObject.setValue("updateUser",id);
    }

    //设置修改时要填充的字段数据
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("MyMetaObjectHandler-updateFill：线程id={}",Thread.currentThread().getId());
        log.info("【公共字段自动填充-update】");
        //Long id = (Long) session.getAttribute("employee");
        Long id = BaseContext.getCurrentId();

        //修改时间 修改人
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser",id);
    }
}
